/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.common.util.mvc.valid.imp._baseobject;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;

import com.asoft.common.base.manager.Manager;
import com.asoft.common.util.mvc.valid.AbstractValidator;
import com.asoft.common.util.mvc.valid.InitValidatorException;

/**
 * 是否有这个model （BaseObject）
 *
 * created by amon 2005-5-17 20:39
 */

public class hasThisBaseObjectByCode implements AbstractValidator
{
        static Logger logger = Logger.getLogger(hasThisBaseObjectByCode.class);

        /**
         * 校验
         * @ param param 待校验的参数
         * @ param initVlaues 配置器提供的初始化参数
         *
         * return 校验结果
         *
         * InitValidatorException 校验器初始化异常
         */
        public boolean validing(Object param , Object[] initValues)
          throws InitValidatorException
        {
                if(param == null )
                        throw new InitValidatorException("model存在校验器初始化失败： id == null");
                if(initValues.length != 2)
                        throw new InitValidatorException("model存在校验器初始化失败： 配置不正确." + this.help());
                try
                {
                        String code = (String)param;
                        String managerId = (String)initValues[0];
                        ApplicationContext applicationContext = (ApplicationContext)initValues[1];
                        Manager manager = (Manager)applicationContext.getBean(managerId);
                        try
                        {
                                if(manager.getByCode(code) != null)
                                        return true;
                                else
                                        return false;
                        }
                        catch(Exception x)
                        {
                                logger.error("通过'" + managerId +"'查询code = '" + code + "'对应的model失败");
                                return false;
                        }
                }
                catch(ClassCastException cce)
                {
                        logger.error("model存在校验失败 : " + cce.toString());
                        throw new InitValidatorException("model存在校验器校验失败." + this.help() + " 异常内容:" + cce.toString());
                }
        }


        /**
         * 帮助
         */
        public String help()
        {
                String help = "<param><!-- 定义在'applicationContext-manager.xml'里面的beanId --></param>" +
                              "<param>${applicationContext}<!-- spring's ApplicationContext --></param>";
                return help;
        }

}

